﻿/*
File: CBaseMesh.h

Leírás:
Az IMesh interface-t megvalósító osztály. Egy .X file-t és egy textúrát kell megadni a létrehozáskor.

Szerző:
SevN
*/

#ifndef __CBASEMESH_H__
#define __CBASEMESH_H__
#include "IRenderable.h"
#include "..\Content\CObject.h"
#include "..\Engine\CDevice.h"
#include "..\Includes\IMesh.h"
#include <d3dx9.h>
#include <string>
#include "..\Util\Utilities.h"

namespace Content
{
  class CBaseMesh : public IMesh
  {
  public:
    CBaseMesh(const std::string mesh_in,const std::string texture_in);
    ~CBaseMesh();


    void setPos(const float x, const float y,const float z);
    void getPos(float& x, float& y, float& z);
    void moveVec(const float x, const float y, const float z);
    void getOrientation(float& yaw, float& pitch, float& roll);
    void yaw(const float f);
    void pitch(const float f);
    void roll(const float f);
    void setYaw(const float f);
    float getYaw();
    void setPitch(const float f);
    float getPitch();
    void setRoll(const float f);
    float getRoll();

    // mesh anyagainak darabszáma(egyelőre 1)
    int getMaterialCount();

    // mesh geometria lekérése
    ID3DXMesh* getMesh();

    // mesh-t lefedő textúra lekérése
    IDirect3DTexture9* getTexture();

    virtual void onLostDevice();
    virtual void onResetDevice();

    void clean();
  private:

    bool initMesh();
    void initTexture();
    void init(const std::string mesh_in, const std::string texture_in);

    std::string meshFile;
    std::string textureFile;
    DWORD materialCnt;

    IDirect3DTexture9* pTexture;
    ID3DXMesh* pMesh;
    IDirect3DDevice9* pD3DDevice;

    CObject* pMeshObj;
  };

}
#endif